import re
import Page
from Page import App
from Base.Base import Base
from selenium.webdriver.common.by import By


class AppIndexPage(Base):
    """
    车应用首页
    """

    def __init__(self, driver):
        Base.__init__(self, driver)

        # 应用市场按钮
        self.index_app_market_btn = (By.XPATH, Page.TEXT.format("应用市场"))

        # 应用管理按钮
        self.index_app_manager_btn = (By.XPATH, Page.TEXT.format("应用管理"))

        # 应用列表封面
        self.index_list_app_cover_img = (By.XPATH, App.index_list_app_cover_img.format(""))

        # 应用列表描述
        self.index_list_app_desc_text = (By.XPATH, App.index_list_app_desc_text.format(""))

        # 应用列表按钮
        self.index_list_app_btn_btn = (By.XPATH, App.index_list_app_btn_btn.format(""))

        # 应用管理页的列表按钮
        self.index_list_app_with_num = (By.XPATH, App.index_list_app_with_num.format(1))

        # 弹窗确认按钮
        self.index_confirm_sure_btn = (By.XPATH, App.RESOURCE_ID.format("btn_confirm_sure"))

        # 弹窗内容
        self.index_confirm_content_text = (By.XPATH, App.RESOURCE_ID.format("confirm_dialog_content"))

    def get_app_market(self):
        """
        获取应用市场按钮

        :return:
        """
        return self.find_element_o(self.index_app_market_btn)

    def get_list_app_cover(self, app_name):
        """
        获取指定名称的应用的封面

        :param app_name: 应用中文名
        :return:
        """
        if self.is_display_app(app_name):
            self.index_list_app_cover_img = (By.XPATH, App.index_list_app_cover_img.format(app_name))
        else:
            self.swipe_list()
            self.index_list_app_cover_img = (By.XPATH, App.index_list_app_cover_img.format(app_name))
        return self.find_element_o(self.index_list_app_cover_img)

    def get_list_app_desc(self, app_name):
        """
        获取指定名称的应用描述

        :param app_name: 应用中文名
        :return:
        """
        if self.is_display_app(app_name):
            self.index_list_app_desc_text = (By.XPATH, App.index_list_app_desc_text.format(app_name))
        else:
            self.swipe_list()
            self.index_list_app_desc_text = (By.XPATH, App.index_list_app_desc_text.format(app_name))
        return self.find_element_o(self.index_list_app_desc_text)

    def get_list_app_btn(self, app_name):
        """
        获取指定名称的应用按钮

        :param app_name: 应用中文名
        :return:
        """
        if self.is_display_app(app_name):
            self.index_list_app_btn_btn = (By.XPATH, App.index_list_app_btn_btn.format(app_name))
        else:
            self.swipe_list()
            self.index_list_app_btn_btn = (By.XPATH, App.index_list_app_btn_btn.format(app_name))
        return self.find_element_o(self.index_list_app_btn_btn)

    def get_list_app_with_num(self, index=1):
        """
        根据索引值获取应用按钮

        :param index: 索引值
        :return:
        """
        self.index_list_app_with_num = (By.XPATH, App.index_list_app_with_num.format(index))
        return self.find_element_o(self.index_list_app_with_num)

    def get_confirm_content(self):
        """
        获取弹窗内容

        :return:
        """
        return self.find_element_o(self.index_confirm_content_text)

    def get_confirm_content_number(self):
        """
        获取总升级大小

        :return:
        """
        confirm_content = self.get_ele_text(self.get_confirm_content())
        pattern = re.compile(r'\d+\.+\d+')  # 查找数字
        res = pattern.findall(confirm_content)
        return res

    def is_display_app(self, app_name):
        self.index_list_app_desc_text = (By.XPATH, App.index_list_app_desc_text.format(app_name))
        return self.is_display(self.index_list_app_desc_text)

    def is_display_app_with_num(self, index):
        """
        是否展示指定索引的应用

        :param index: 索引值
        :return:
        """
        self.index_list_app_with_num = (By.XPATH, App.index_list_app_with_num.format(index))
        return self.is_display(self.index_list_app_with_num)

    def click_app_manager(self):
        """
        点击应用管理tab

        :return: None
        """
        self.click_element(self.index_app_manager_btn)

    def click_list_app_cover(self, app_name):
        """
        点击指定索引的应用标题

        :param app_name: 应用中文名
        :return:
        """
        if self.is_display_app(app_name):
            self.index_list_app_cover_img = (By.XPATH, App.index_list_app_cover_img.format(app_name))
        else:
            self.swipe_list()
            self.index_list_app_cover_img = (By.XPATH, App.index_list_app_cover_img.format(app_name))
        self.click_element(self.index_list_app_cover_img)

    def click_list_app_btn(self, app_name):
        """
        点击指定索引的应用标题

        :param app_name: 应用中文名
        :return:
        """
        if self.is_display_app(app_name):
            self.index_list_app_btn_btn = (By.XPATH, App.index_list_app_btn_btn.format(app_name))
        else:
            self.swipe_list()
            self.index_list_app_btn_btn = (By.XPATH, App.index_list_app_btn_btn.format(app_name))
        self.click_element(self.index_list_app_btn_btn)

    def click_confirm_sure(self):
        """
        点击弹窗的确认

        :return:
        """
        self.click_element(self.index_confirm_sure_btn)

    def swipe_list(self, direction=Page.DIRECTION_LEFT):
        """
        根据用户输入的方向, 滑动列表

        :param direction:
        :return:
        """
        self.swipe_o(location=(300, 1000, 400, 400), direction=direction)
